package com.atguigu.aliyunoss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.joda.time.DateTime;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.UUID;

public class OSSTest {
    // Endpoint以杭州为例，其它Region请按实际情况填写。
    String schema = "https://";
    String endpoint = "oss-cn-shanghai.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建RAM账号。
    String accessKeyId = "LTAI5tMdNwtR2LgFvLdhdsgp";
    String accessKeySecret = "xanEbkEDXQ7O3dvoW12sOHBsLSyOBD";
    String bucketName = "online-edu0325";

    @Test
    public void upload() throws FileNotFoundException {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(schema + endpoint, accessKeyId, accessKeySecret);
        //上传文件，删除文件
        System.out.println("ossClient = " + ossClient);
        // 填写本地文件的完整路径。如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。
        String file = "D:/AtGuiGU/JavaStudy/08_xu/13-尚硅谷JavaEE技术之在线教育/A资料/静态资源/图片/teacher/06.jpg";
        InputStream inputStream = new FileInputStream(file);
        //文件上传的优化
        //1、给文件设置唯一的文件名
        String fileName = UUID.randomUUID().toString().replace("-", "") +
                file.substring(file.lastIndexOf("."));
        //2、为了方便根据时间 管理文件，上传文件时可以将文件以日期目录的形式归纳
//        new DateTime().minusDays(n)  在今天的基础上-n天
//        new DateTime().plusDays(n)  在今天的基础上 +n天
        String dateStr = new DateTime().toString("/yyyy/MM/dd/");
        // avatar/2021/07/30/
        // 依次填写Bucket名称（例如examplebucket）和Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。

        ossClient.putObject(bucketName,
                //key：表示文件保存在桶内的 路径+文件名
                "avatar" + dateStr + fileName, inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();

        //获取上传成功的文件地址
        //sh210325-guli.oss-cn-shanghai.aliyuncs.com/avatar/2021/07/30/13d5ce88785c4876a04407980abb75a6.jpg
        //https://+ 桶名+ . + 地域节点 + / + "avatar"+dateStr+fileName
        String path = schema + bucketName + "." + endpoint + "/" + "avatar" + dateStr + fileName;
        System.out.println(path);
    }

    @Test
    public void delete() {
        String path = "https://online-edu0325.oss-cn-shanghai.aliyuncs.com/avatar/2021/08/01/cc4643f521fd43babee851790b4c12a3.jpg";
        // 填写文件在桶内的完整路径
        String objectName = path.substring(path.lastIndexOf("avatar"));
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(schema+endpoint, accessKeyId, accessKeySecret);

        // 删除文件或目录。如果要删除目录，目录必须为空。
        ossClient.deleteObject(bucketName, objectName);

        // 关闭OSSClient。
        ossClient.shutdown();
    }

}
